//封装本地存储数据与读取数据方法
const SET_TOKEN = (token: string) => {
  localStorage.setItem("TOKEN", token);
}

const GET_TOKEN = () => {
  const token = localStorage.getItem("TOKEN");
  console.log('GET_TOKEN called, token:', token ? '存在' : '不存在');
  return token;
}

//本地存储删除数据
const REMOVE_TOKEN = () => {
  localStorage.removeItem('TOKEN');
  console.log('REMOVE_TOKEN called, token已移除');
}

/**
 * 解析JWT Token
 * @param token JWT Token
 * @returns 解析后的载荷对象，如果解析失败则返回空对象
 */
const parseJwt = (token: string): any => {
  console.log('解析token:', token ? token.substring(0, 15) + '...' : 'null');
  try {
    // 分割token
    const parts = token.split('.');
    if (parts.length !== 3) {
      console.error('Token格式错误, 应该有3部分');
      return {};
    }
    
    // 解码JWT的payload部分
    const base64Url = parts[1];
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
    const payload = decodeURIComponent(atob(base64).split('').map((c) => {
      return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));
    
    const result = JSON.parse(payload);
    console.log('Token解析成功, 包含角色:', result.role);
    return result;
  } catch (error) {
    console.error('解析Token失败:', error);
    return {};
  }
}

export { SET_TOKEN, GET_TOKEN, REMOVE_TOKEN, parseJwt };